##【例13.2】基于Haar的特征分类器进行车牌检测

import cv2
carplate_haar = cv2.CascadeClassifier(r'D:\pycharm\cv2\haarcascade_russian_plate_number.xml')

def carplate_detect(image):    #用于检测图像中的车牌，并在检测到的车牌周围绘制矩形框。
    carplate_overlay = image.copy()
    carplate_rects = carplate_haar.detectMultiScale(carplate_overlay,
                                        scaleFactor=1.1, minNeighbors=3)    #在每个图像比例下图像尺寸缩小的比例。指定每个候选矩形框应保留的邻近数目。
    for x, y, w, h in carplate_rects:
       cv2.rectangle(carplate_overlay, (x, y), (x + w, y + h), (255, 0, 0), 5)   #在图像上绘制矩形框。
       return carplate_overlay
def carplate_extract(image):  #从图像中提取车牌区域。
    carplate_rects = carplate_haar.detectMultiScale(image,
                                          scaleFactor=1.1, minNeighbors=5)
    for x, y, w, h in carplate_rects:
        carplate_img = image[y + 15:y + h - 10, x + 15:x + w - 20]  #调整矩形框的上下边界
        return carplate_img

if __name__ == '__main__':
   img=cv2.imread('D:\pics\els.jpg')
   img1 = carplate_detect(img)   #检测车牌
   cv2.imshow('Carimage',img1)
   img2=carplate_extract(img1)  #截取车牌
   cv2.imshow('Plateimage',img2)
   cv2.waitKey(0)
   cv2.destroyAllWindows()